#include <stdio.h>
#include "/home/zqr/c_src/lib/linked_stack/linked_stack.h"

// 示例：整数栈的使用
void print_int(const void *data) {
    printf("%d ", *((int*)data));
}

int main() {
    Stack *int_stack;
    StackStatus status;
    
    // 初始化整数栈（不需要自定义销毁函数）
    status = stack_init(&int_stack, sizeof(int));
    if (status != STACK_SUCCESS) {
        printf("栈初始化失败: %d\n", status);
        return -1;
    }
    
    // 入栈操作
    int values[] = {10, 20, 30, 40};
    for (int i = 0; i < 4; i++) {
        status = stack_push(int_stack, &values[i]);
        if (status != STACK_SUCCESS) {
            printf("入栈失败: %d\n", status);
        }
    }
    
    printf("栈中元素个数: %zu\n", stack_nmemb(int_stack));
    
    // 遍历栈
    printf("\n");
    
    // 获取栈顶元素
    int top_value;
    status = stack_top(int_stack, &top_value);
    if (status == STACK_SUCCESS) {
        printf("栈顶元素: %d\n", top_value);
    }
    
    // 出栈操作
    while (!stack_empty(int_stack)) {
        status = stack_pop(int_stack);
        if (status != STACK_SUCCESS) {
            printf("出栈失败: %d\n", status);
            break;
        }
        printf("出栈成功，剩余元素: %zu\n", stack_nmemb(int_stack));
    }
    
    stack_destroy(&int_stack);
    return 0;
}